#include <iostream>
#include <cstdio>

#define N 33
#define m 15

using namespace std;

int n;
int ans = 0;
int check[3][N]; //0行，1对角线，2对角线
//对角线满足x+y=定值或x-y=定值
int a[N];

void dfs(int x){ //x表示行(?)
    if(x > n){
        ans++;
        if(ans > 3) return;
        else{
            for(int i = 1; i <= n; i++){
                printf("%d ", a[i]);
            }
            printf("\n");
        }
    }
    for(int i = 1; i <= n; i++){//枚举列
        if(check[0][i] == 0 && check[1][x + i] == 0 && check[2][x - i + m] == 0){
            check[0][i] = 1; check[1][x + i] = 1; check[2][x - i + m] = 1;
            a[x] = i;
            dfs(x + 1);
            check[0][i] = 0; check[1][x + i] = 0; check[2][x - i + m] = 0;
        }
    }
}

int main(){
    cin >> n;
    dfs(1);
    cout << ans;
    return 0;
}